home *** CD-ROM | disk | FTP | other *** search
Wrap
############################################################################### # NeXT common.make # Copyright 1992, NeXT Computer, Inc. # # This makefile is common to all project-types (apps, subprojects, # bundles, and palettes). It can also prove useful to custom Makefiles # needing generic project-building functionality, but users should be aware # that interfaces supported at this level are private to the app makefiles # and may change from release to release. # ############################################################################### all:: SUPPORTFILES = IB.nproj Makefile makefile $(NAME).iconheader \ Makefile.preamble Makefile.postamble *.project SRCFILES = $(CLASSES) $(MFILES) $(CFILES) \ $(CCFILES) $(CAPCFILES) $(CAPMFILES) $(CXXFILES) $(CPPFILES) \ $(HFILES) $(PSWFILES) $(PSWMFILES) $(DBMODELAFILES) \ $(GLOBAL_RESOURCES) \ $(OTHERSRCS) $(OTHERLINKED) $(OTHER_SOURCEFILES) ### Compute all the possible derived files and directories for them: # Defaults for NeXT-specific Release Control options SRCROOT = . SYMROOT = . OBJROOT = . RC_ARCHS = `/usr/bin/arch` RC_CFLAGS = -arch `/usr/bin/arch` # Directory for .o files (can be thrown away) OFILE_DIR = $(OBJROOT)/$(ARCH_LIST)obj # Directory for all other derived files (contains symbol info. for debugging) SYM_DIR = $(SYMROOT)/sym # Directory for all public headers of the entire project tree LOCAL_HEADER_DIR = ./Headers/$(NAME) #PUBLIC_HEADER_DIR = ./Headers/$(NAME) # For compatibility: DERIVED_DIR = $(OFILE_DIR) DERIVED_SRC_DIR = $(SYM_DIR) $(OFILE_DIR) $(SYM_DIR) $(PUBLIC_HEADER_DIR): @$(MKDIRS) $@ MSGOFILES = $(MSGFILES:.msg=Speaker.o) $(MSGFILES:.msg=Listener.o) MSGDERIVEDMFILES = $(MSGFILES:.msg=Speaker.m) $(MSGFILES:.msg=Listener.m) ALLMIGFILES = $(MIGFILES) $(DEFSFILES) MIGOFILES = $(MIGFILES:.mig=User.o) $(MIGFILES:.mig=Server.o) DEFSOFILES = $(DEFSFILES:.defs=User.o) $(DEFSFILES:.defs=Server.o) ALLMIGOFILES = $(MIGOFILES) $(DEFSOFILES) MIGDERIVEDCFILES = $(MIGFILES:.mig=User.c) $(MIGFILES:.mig=Server.c) DEFSDERIVEDCFILES = $(DEFSFILES:.defs=User.c) $(DEFSFILES:.defs=Server.c) ALLMIGDERIVEDCFILES = $(MIGDERIVEDCFILES) $(DEFSDERIVEDCFILES) EARLY_OFILES = $(PSWFILES:.psw=.o) $(PSWMFILES:.pswm=.o) INITIAL_TARGETS = build_tools $(OFILE_DIR) $(SYM_DIR) $(EARLY_OFILES) $(MSGOFILES) $(ALLMIGOFILES) $(PRECOMPS) $(OTHER_INITIAL_TARGETS) SUBPROJ_OFILES = $(SUBPROJECTS:.subproj=_subproj.o) OFILES = $(CLASSES:.m=.o) $(MFILES:.m=.o) $(CFILES:.c=.o) \ $(CCFILES:.cc=.o) $(CAPCFILES:.C=.o) $(CAPMFILES:.M=.o) \ $(CXXFILES:.cxx=.o) $(CPPFILES:.cpp=.o) $(EARLY_OFILES) \ $(SUBPROJ_OFILES) $(OTHERLINKEDOFILES) # Note: It would be nice to put $(OTHERRELOCATABLES) in this list someday # when PB provides full paths for the contents of this variable. # Derived resources: DBMODELS = $(DBMODELAFILES:.dbmodela=.dbmodel) HELP_DIRS = Help HELP_STORES = $(HELP_DIRS:=.store) $(OTHER_HELP_DIRS:=.store) ### Set defaults for many values used throughout the app Makefiles # Default extension for bundles (directories containing object code and resources) MAKEFILES = Makefile PRODUCT_DEPENDS = $(OFILES) $(OTHER_OFILES) $(DBMODELS) \ $(ICONHEADER) $(APPICON) $(DOCICONS) $(MAKEFILES) \ $(OTHER_PRODUCT_DEPENDS) GARBAGE = $(PSWFILES:.psw=.c) $(PSWMFILES:.pswm=.m) \ $(PSWFILES:.psw=.h) $(PSWMFILES:.pswm=.m) \ $(SYMROOT)/$(NAME).app $(SYMROOT)/$(NAME).debug \ $(SYMROOT)/$(NAME).profile $(SYMROOT)/$(NAME).$(BUNDLE_EXTENSION) \ $(SYMROOT)/$(NAME) $(SYMROOT)/$(NAME).palette \ $(SYMROOT)/lib$(NAME).a $(SYMROOT)/lib$(NAME).dylib \ $(OBJROOT)/*_obj $(SYM_DIR) *~ $(LANGUAGE).lproj/*~ \ Makefile.dependencies ./$(CHANGES_FILE) gmon.out \ $(PRECOMPS) $(OTHER_INITIAL_TARGETS) $(OTHER_GARBAGE) # Default name for file to use as "reference time of last build" CHANGES_FILE = .lastBuildTime # Defaults for who to chown executables to when installing INSTALL_AS_USER = root INSTALL_AS_GROUP = wheel # Default compiler options PROJECT_SPECIFIC_CFLAGS = $(HEADER_PATHS) $(PB_CFLAGS) $(CFLAGS) $(OTHER_CFLAGS) PROJ_CFLAGS = $(PROJECT_SPECIFIC_CFLAGS) OPTIMIZATION_CFLAG = -O COMMON_CFLAGS = -g -Wall $(PROJECT_SPECIFIC_CFLAGS) NORMAL_CFLAGS = $(COMMON_CFLAGS) $(OPTIMIZATION_CFLAG) DEBUG_CFLAGS = $(COMMON_CFLAGS) -DDEBUG PROFILE_CFLAGS = $(COMMON_CFLAGS) -pg $(OPTIMIZATION_CFLAG) -DPROFILE OBJCFLAG = -ObjC C++CFLAGS = # The flags to actually be used in this compilation: ALL_CFLAGS = $(PROJ_CFLAGS) $(PROPOGATED_CFLAGS) -I$(SYM_DIR) $(RC_CFLAGS) # Link editor options: ALL_LDFLAGS = $(LIBRARY_PATHS) $(PB_LDFLAGS) $(LDFLAGS) $(OTHER_LDFLAGS) # Yacc options YFLAGS = -d # Defaults strip options RELOCATABLE_STRIP_OPTS = -x -u DYLD_APP_STRIP_OPTS = -A -n APP_STRIP_OPTS = # Set this to $(DYLD_APP_STRIP_OPTS) when doing dynaloading yourself TOOL_STRIP_OPTS = # (ditto) LIBRARY_STRIP_OPTS = -x -S # Note: -S strips debugging symbols # Various commands: SHELL = /bin/sh FASTCP = /usr/lib/fastcp CHANGES = /usr/lib/changes ARCH_TOOL = /usr/lib/arch_tool ARCHIFY = /usr/lib/arch_tool -archify_list CHOWN = /etc/chown CHMOD = /bin/chmod TAR = /usr/bin/gnutar STRIP = /bin/strip RM = /bin/rm LN = /bin/ln -s CP = /bin/cp INSTALL_HEADERS_CMD = $(CP) ECHO = /bin/echo MKDIRS = /bin/mkdirs TOUCH = /usr/bin/touch AWK = /bin/awk PSWRAP = /usr/bin/pswrap MSGWRAP = /usr/bin/msgwrap MIG = /usr/bin/mig DBC = /NextDeveloper/Apps/DBModeler.app/dbcompiler COMPRESSHELP = /usr/bin/compresshelp LIBTOOL = /bin/libtool PUSHD = pushed_dir=`pwd` ; cd POPD = cd $$pushed_dir ADAPTOR_SEARCH_PATH = $(HOME)/Library/Adaptors /LocalLibrary/Adaptors /NextLibrary/Adaptors DEFAULT_BUNDLE_EXTENSION = bundle # Set VPATH via a variable so clients of common.make can reuse it when overriding VPATH NORMAL_VPATH = $(OFILE_DIR):$(SYM_DIR):$(LANGUAGE).lproj:$(PRODUCT_ROOT):$(PRODUCT_ROOT)/$(LANGUAGE).lproj VPATH = $(VPATH_PREAMBLE)$(NORMAL_VPATH)$(VPATH_POSTAMBLE) ### Use a set of basic suffix-style rules: COMMON_APP_MAKEFILE_DIR = /NextDeveloper/Makefiles/app include $(COMMON_APP_MAKEFILE_DIR)/basicrules.make ### Some utility definitions used throughout the PB Makefiles process_target_archs = \ if [ -n "$(TARGET_ARCHS)" ] ; then \ archs="$(TARGET_ARCHS)" ; \ arch_cflags=`$(ARCHIFY) $$archs`; \ else \ archs="$(RC_ARCHS)" ; \ arch_cflags="$(RC_CFLAGS)" ; \ fi ; \ obj_dir=`$(ARCH_TOOL) -choose_obj_dir $$archs` set_bundle_ext = \ if [ -z "$(BUNDLE_EXTENSION)" ] ; then \ bundle_ext=$(DEFAULT_BUNDLE_EXTENSION) ; \ else \ bundle_ext=$(BUNDLE_EXTENSION) ; \ fi set_language_cflags = \ if [ "$(ENGLISH)" = "YES" -o "$(JAPANESE)" != "YES" ] ; then \ language_cflags='' ; \ else \ language_cflags='-DKANJI' ; \ fi ### Define all the targets necessary at every level of the project-hierarchy: # The following rules and rule fragments do the recursion into "sub" projects # of this project and does a 'make project' for each one in its # respective directories. This insures that we do not rely on the directory # timestamp or "hack" file to know whether or not something has changed. CHANGES_COMMAND = $(CHANGES) $(TOP_PRODUCT_ROOT)/$(CHANGES_FILE) "$(OFILE_DIR)" use_default_directory_args = \ top_prod_root=`echo $(TOP_PRODUCT_ROOT) | sed '/^[^/]/s:^:../:'` ; \ prod_root=`echo $(PRODUCT_ROOT) | sed '/^[^/]/s:^:../:'` ; \ ofile_dir=`echo $(OFILE_DIR) | sed '/^[^/]/s:^:../:'` ;\ sym_dir=`echo $(SYM_DIR) | sed '/^[^/]/s:^:../:'` use_absolute_directory_args = \ $(PUSHD) $(PRODUCT_ROOT) ; abs_prod_root=`pwd` ; $(POPD) ; \ prod_root=$$abs_prod_root ; \ $(PUSHD) $(TOP_PRODUCT_ROOT) ; abs_top_prod_root=`pwd` ; $(POPD) ; \ top_prod_root=$$abs_top_prod_root ; \ $(PUSHD) $(OFILE_DIR) ; abs_ofile_dir=`pwd` ; $(POPD) ; \ ofile_dir=$$abs_ofile_dir ; \ $(PUSHD) $(SYM_DIR) ; abs_sym_dir=`pwd` ; $(POPD) ; \ sym_dir=$$abs_sym_dir subprojs $(SUBPROJ_OFILES): @(targets=`$(CHANGES_COMMAND) $(SUBPROJECTS)`;\ for ofile in $(SUBPROJ_OFILES) none ; do \ if [ $$ofile = "none" ] ; then break; fi ; \ if [ ! -f $(OFILE_DIR)/$$ofile ] ; then \ targets="$(SUBPROJECTS)" ; break; \ fi ; \ done ; \ $(use_default_directory_args) ;\ for sub in $$targets none ; do \ if [ $$sub = "none" ] ; then break; fi ;\ if [ -h $$sub ] ; then \ $(use_absolute_directory_args) ; \ fi ; \ $(PUSHD) $$sub; $(ECHO) Making $$sub ; \ $(MAKE) project \ "PRODUCT_ROOT = $$prod_root" \ "TOP_PRODUCT_ROOT = $$top_prod_root" \ "OFILE_DIR = $$ofile_dir/$$sub" \ "PRODUCT_PREFIX = $$ofile_dir/$$sub" \ "SYM_DIR = $$sym_dir/$$sub" \ "APP_MAKEFILE_DIR = $(APP_MAKEFILE_DIR)" \ "SRCROOT = $(SRCROOT)" \ "OBJROOT = $(OBJROOT)" \ "SYMROOT = $(SYMROOT)" \ "PROPOGATED_CFLAGS = $(PROJ_CFLAGS) $(PROPOGATED_CFLAGS) -I$$sym_dir" \ "RC_ARCHS = $(RC_ARCHS)" \ "RC_CFLAGS = $(RC_CFLAGS)" ; \ $(POPD) ; $(ECHO) Finished making $$sub ; \ done ) bundles: @(targets=`$(CHANGES_COMMAND) $(BUNDLES)` ; \ $(use_default_directory_args) ;\ for bun in $$targets none ; do \ if [ $$bun = "none" ] ; then break; fi ; \ if [ -h $$bun ] ; then \ $(use_absolute_directory_args) ; \ fi ; \ $(PUSHD) $$bun; $(ECHO) Making $$bun ; \ $(MAKE) project \ "TOP_PRODUCT_ROOT = $$top_prod_root" \ "BUNDLE_DIR = $$prod_root/$$bun" \ "BUNDLE_PARENT_PRODUCT_DIR = $$prod_root" \ "REL_BUNDLE_DIR = $$bun" \ "OFILE_DIR = $$ofile_dir/$$bun" \ "SYM_DIR = $$sym_dir/$$bun" \ "APP_MAKEFILE_DIR = $(APP_MAKEFILE_DIR)" \ "SRCROOT = $(SRCROOT)" \ "OBJROOT = $(OBJROOT)" \ "SYMROOT = $(SYMROOT)" \ "PROPOGATED_CFLAGS = $(PROJ_CFLAGS) $(PROPOGATED_CFLAGS) -I$$sym_dir" \ "RC_ARCHS = $(RC_ARCHS)" \ "RC_CFLAGS = $(RC_CFLAGS)" ; \ $(POPD) ; $(ECHO) Finished making $$bun ; \ done ) tools: @(targets=`$(CHANGES_COMMAND) $(TOOLS)` ; \ $(use_default_directory_args) ;\ for tool in $$targets none ; do \ if [ $$tool = "none" ] ; then break; fi ; \ if [ -h $$tool ] ; then \ $(use_absolute_directory_args) ; \ fi ; \ $(PUSHD) $$tool; $(ECHO) Making $$tool ; \ $(MAKE) project \ "TOP_PRODUCT_ROOT = $$top_prod_root" \ "PRODUCT_ROOT = $$prod_root" \ "OFILE_DIR = $$ofile_dir/$$tool" \ "SYM_DIR = $$sym_dir/$$tool" \ "APP_MAKEFILE_DIR = $(APP_MAKEFILE_DIR)" \ "SRCROOT = $(SRCROOT)" \ "OBJROOT = $(OBJROOT)" \ "SYMROOT = $(SYMROOT)" \ "PROPOGATED_CFLAGS = $(PROJ_CFLAGS) $(PROPOGATED_CFLAGS) -I$$sym_dir" \ "RC_ARCHS = $(RC_ARCHS)" \ "RC_CFLAGS = $(RC_CFLAGS)" ; \ $(POPD) ; $(ECHO) Finished making $$tool ; \ done ) build_tools: @(targets=`$(CHANGES_COMMAND) $(BUILD_TOOLS)` ; \ $(use_default_directory_args) ;\ for tool in $$targets none ; do \ if [ $$tool = "none" ] ; then break; fi ; \ if [ -h $$tool ] ; then \ $(use_absolute_directory_args) ; \ fi ; \ $(PUSHD) $$tool; $(ECHO) Making $$tool ; \ $(MAKE) project \ "TOP_PRODUCT_ROOT = $$top_prod_root" \ "PRODUCT_ROOT = $$prod_root" \ "OFILE_DIR = $$ofile_dir/$$tool" \ "SYM_DIR = $$sym_dir/$$tool" \ "APP_MAKEFILE_DIR = $(APP_MAKEFILE_DIR)" \ "SRCROOT = $(SRCROOT)" \ "OBJROOT = $(OBJROOT)" \ "SYMROOT = $(SYMROOT)" \ "PROPOGATED_CFLAGS = $(PROJ_CFLAGS) $(PROPOGATED_CFLAGS) -I$$sym_dir" \ "RC_ARCHS = $(RC_ARCHS)" \ "RC_CFLAGS = $(RC_CFLAGS)" ; \ $(POPD) ; $(ECHO) Finished making $$tool ; \ done ) .bproj.strip .tproj.strip: @(cd $<; \ $(MAKE) strip "DSTROOT = $(DSTROOT)" \ "PARENT_DIR = $(PARENT_DIR)" \ "NAME=$*") strip:: strip_myself $(BUNDLES:.bproj=.strip) $(TOOLS:.tproj=.strip) strip_myself:: # The following rule insures that resources for this particular level in the project hierarchy get copied over to the appropriate place in the PRODUCT_ROOT. Note that we depend on VPATH including $(LANGUAGE).lproj so that the LOCAL_RESOURCES are found correctly. FASTCP is used to minimize the copying of files, since most resources are likely to be up to date most of the time. resources:: $(LOCAL_RESOURCES) $(GLOBAL_RESOURCES) $(HELP_STORES) $(OTHER_RESOURCES) @(if [ "$(PRODUCT_ROOT)" != "." ] ; then \ $(MKDIRS) $(PRODUCT_ROOT)/$(LANGUAGE).lproj ; \ fi ; \ if [ "$(LOCAL_RESOURCES)" != "" ] ; then \ locals="" ; \ for resource in $(LOCAL_RESOURCES) none ; do \ insert="true"; \ for helpdir in $(HELP_DIRS) $(OTHER_HELP_DIRS) none ; do \ if [ "$$resource" = "$$helpdir" ] ; \ then insert="false"; \ fi ; \ done ; \ if [ "$$insert" = "true" ] ; then \ locals="$$locals $$resource" ; \ fi ; \ done ; \ $(FASTCP) $$locals $(PRODUCT_ROOT)/$(LANGUAGE).lproj ; \ fi ; \ if [ "$(GLOBAL_RESOURCES)" != "" ] ; then \ $(FASTCP) $(GLOBAL_RESOURCES) $(PRODUCT_ROOT) ; \ fi ) # rules for copying, cleaning and making dependencies .bproj.copy .subproj.copy .tproj.copy: @(cd $<; $(MAKE) copy "NAME=$*" "DEST=$(DEST)/$<") .bproj.clean .subproj.clean .tproj.clean: @(echo Cleaning $<... ; cd $<; \ $(MAKE) clean "NAME=$*") .bproj.depend .subproj.depend .tproj.depend: @(sym_dir=`echo $(SYM_DIR) | sed '/^[^/]/s:^:../:'` ; \ cd $<; \ $(MAKE) depend "NAME=$*" \ "PROPOGATED_CFLAGS = $(PROJ_CFLAGS) $(PROPOGATED_CFLAGS) -I$$sym_dir/$<" ) SRCROOT DEST: @if [ -n "${$@}" ]; then exit 0; \ else $(ECHO) Must define $@; exit 1; fi $(DEST):: -$(RM) -rf $(DEST) @$(MKDIRS) $(DEST) $(NAME).copy:: DEST $(DEST) $(SRCFILES) @(if [ "$(SRCFILES)" != "" ] ; then \ $(ECHO) "$(TAR) chf - $(SRCFILES) | (cd $(DEST); $(TAR) xf -)" ; \ $(TAR) chf - $(SRCFILES) | (cd $(DEST); $(TAR) xf -) ; \ fi ; \ $(MKDIRS) $(DEST)/$(LANGUAGE).lproj ; \ if [ "$(LOCAL_RESOURCES)" != "" ] ; then \ $(ECHO) "(cd $(LANGUAGE).lproj; $(TAR) chf - $(LOCAL_RESOURCES)) | (cd $(DEST)/$(LANGUAGE).lproj; $(TAR) xf - )" ; \ (cd $(LANGUAGE).lproj; $(TAR) chf - $(LOCAL_RESOURCES)) | (cd $(DEST)/$(LANGUAGE).lproj; $(TAR) xf -) ; \ fi ; \ supportfiles="" ; \ for i in $(SUPPORTFILES) $(APPICON) $(DOCICONS) none ; do \ if [ -r $$i -a ! -r $(DEST)/$$i ] ; then \ supportfiles="$$supportfiles $$i" ; \ fi ; \ done ; \ if [ "$$supportfiles" != "" ] ; then \ $(ECHO) "$(TAR) chf - $$supportfiles | (cd $(DEST); $(TAR) xf -)" ; \ $(TAR) chf - $$supportfiles | (cd $(DEST); $(TAR) xf -) ; \ fi) $(NAME).clean:: @if [ ! -w . ] ; then $(ECHO) '***' project write-protected; exit 1 ; fi $(RM) -rf $(GARBAGE) # Build a set of dependencies for current level into Makefile.depndencies Makefile.dependencies:: $(CLASSES) $(MFILES) $(CFILES) $(CCFILES) $(CAPCFILES) $(CAPMFILES) $(CXXFILES) $(CPPFILES) $(INITIAL_TARGETS) @($(RM) -f Makefile.dependencies ; \ if [ "`$(ECHO) $(CLASSES) $(MFILES) $(CFILES) $(CCFILES) $(CAPCFILES) $(CAPMFILES) $(CXXFILES) $(CPPFILES) | wc -w`" != " 0" ] ; then \ if [ "$(ENGLISH)" = "YES" -o "$(JAPANESE)" != "YES" ] ; then \ language_cflags="" ; \ else \ language_cflags="-DKANJI" ; \ fi ; \ $(ECHO) "$(CC) -MM $(PROJ_CFLAGS) $(PROPOGATED_CFLAGS) -I$(SYM_DIR) $$language_cflags $(CLASSES) $(MFILES) $(CFILES) $(CCFILES) $(CAPCFILES) $(CAPMFILES) $(CXXFILES) $(CPPFILES) > Makefile.dependencies" ; \ $(CC) -MM $(PROJ_CFLAGS) $(PROPOGATED_CFLAGS) -I$(SYM_DIR) $$language_cflags $(CLASSES) $(MFILES) $(CFILES) $(CCFILES) $(CAPCFILES) $(CAPMFILES) $(CXXFILES) $(CPPFILES) > Makefile.dependencies || ($(RM) -f Makefile.dependencies ; exit 1) ; \ fi ); copy:: $(NAME).copy $(BUNDLES:.bproj=.copy) \ $(SUBPROJECTS:.subproj=.copy) \ $(TOOLS:.tproj=.copy) writable:: @chmod -R +w * protected:: @chmod -R a-w * installsrc:: SRCROOT @($(MAKE) copy "DEST=$(SRCROOT)") installhdrs_locally: headers headers:: @($(MKDIRS) $(LOCAL_HEADER_DIR) ; \ $(PUSHD) $(LOCAL_HEADER_DIR) ; abs_local_hdr_dir=`pwd`; $(POPD); \ $(MAKE) $(NAME).installhdrs \ "PUBLIC_HEADER_DIR = $$abs_local_hdr_dir" \ "INSTALL_HEADERS_CMD = $(FASTCP)" \ "RC_CFLAGS = $(RC_CFLAGS)" ) installhdrs:: @($(MAKE) $(NAME).installhdrs \ "PUBLIC_HEADER_DIR = $(PUBLIC_HEADER_DIR)" \ "INSTALL_HEADERS_CMD = $(INSTALL_HEADERS_CMD)" \ "RC_CFLAGS = $(RC_CFLAGS)" ) $(NAME).installhdrs:: @(if [ -n "$(PUBLIC_HEADERS)" -a -n "$(PUBLIC_HEADER_DIR)" ] ; then \ $(MKDIRS) $(DSTROOT)$(PUBLIC_HEADER_DIR) ; \ cmd="$(INSTALL_HEADERS_CMD) $(PUBLIC_HEADERS) $(DSTROOT)$(PUBLIC_HEADER_DIR)" ; \ $(ECHO) $$cmd ; $$cmd ; \ fi ; \ for dir in $(BUNDLES) $(SUBPROJECTS) $(TOOLS) none ; do \ if [ $$dir = "none" ] ; then break; fi ; \ $(PUSHD) $$dir; $(ECHO) Installing headers for $$dir ; \ $(MAKE) $$dir.installhdrs "NAME = $$dir" \ "PUBLIC_HEADER_DIR = $(PUBLIC_HEADER_DIR)" \ "INSTALL_HEADERS_CMD = $(INSTALL_HEADERS_CMD)" \ "APP_MAKEFILE_DIR = $(APP_MAKEFILE_DIR)" \ "SRCROOT = $(SRCROOT)" \ "OBJROOT = $(OBJROOT)" \ "SYMROOT = $(SYMROOT)" ; \ $(POPD) ; $(ECHO) Finished installing headers for $$dir ; \ done ; \ $(MAKE) after_installhdrs "NAME = $$dir" \ "PUBLIC_HEADER_DIR = $(PUBLIC_HEADER_DIR)" \ "INSTALL_HEADERS_CMD = $(INSTALL_HEADERS_CMD)" \ "APP_MAKEFILE_DIR = $(APP_MAKEFILE_DIR)" \ "RC_CFLAGS = $(RC_CFLAGS)" \ "SRCROOT = $(SRCROOT)" \ "OBJROOT = $(OBJROOT)" \ "SYMROOT = $(SYMROOT)" ) after_installhdrs:: @(if [ -n "$(PUBLIC_PRECOMPILED_HEADERS)" -a -n "$(PUBLIC_HEADER_DIR)" ] ; then \ cd $(PUBLIC_HEADER_DIR) ; \ for header in $(PUBLIC_PRECOMPILED_HEADERS) none ; do \ if [ $$header = "none" ] ; then break; fi ; \ cd $(PUBLIC_HEADER_DIR) ; \ cmd="cc -precomp $(PUBLIC_PRECOMPILED_HEADERS_CFLAGS) $(RC_CFLAGS) $$header";\ $(ECHO) $$cmd ; $$cmd ; \ done ; \ fi) clean:: @(if [ -z "$(BUNDLE_EXTENSION)" ] ; then \ bundle_ext=$(DEFAULT_BUNDLE_EXTENSION) ; \ else \ bundle_ext=$(BUNDLE_EXTENSION) ; \ fi ; \ if [ -n "$(CLEAN_ALL_SUBPROJECTS)" ] ; then \ $(MAKE) actual_clean really_clean \ "BUNDLE_EXTENSION = $$bundle_ext" ; \ else \ $(MAKE) actual_clean "BUNDLE_EXTENSION = $$bundle_ext" ; \ fi ) actual_clean:: $(NAME).clean really_clean:: $(BUNDLES:.bproj=.clean) \ $(SUBPROJECTS:.subproj=.clean) \ $(TOOLS:.tproj=.clean)